6.9 标准库类型:bitset¶
简介¶
标准库定义了bitset类让位运算的使用更加容易,并且能够处理超过最长整形类型大小的位集合。bitset类定义在头文件bitset中。
定义和初始化bitset¶
bitset类似于array类,具有固定的大小。当我们定义一个bitset时需要声明它包含多少个二进制位:
bitset<32> bitvec(1U); // 32位, 低位为1其他位为0
初始化的方法:
| 操作 | 含义 |
|---|---|
bitset<n> b |
每一位均为0 |
bitset<n> b(u) |
b是unsigned long long值u的低n位的拷贝,如果n大于unsigned long long的大小,那么超过的高位被置为0 |
bitset<n> b(s, pos, m, zero, one) |
b是string s从位置pos开始m个字符的拷贝。s只能包含字符zero和one,如果包含其他字符会抛出invalid_argument的错误。zero默认为0而one默认为1。 |
bitset<n> b(cp, pos, m, zero, one) |
和上面类似,只不过从cp指向的字符数组中拷贝字符 |
bitset操作¶
b.any():b中是否存在置位的二进制位b.all():b中所有位都置位了吗b.none():b中不存在置位的二进制位吗b.count():b中置位的位数b.size():返回b的位数b.test(pos):返回pos位置是否置位b.set(pos, v):将位置pos处的位设置为bool值vb.set():将b中所有位置位b.reset(pos):将pos复位b.reset():将所有位复位b.flip(pos):将位置pos处的位改变b.flip():改变每一位的状态b[pos]:访问pos位b.to_ulong():返回一个unsigned longb.to_ullong():返回一个unsigned long longb.to_string(zero, ont):返回一个stringos << b:将b中二进制位打印为字符1或者0is >> b:从is读取字符存入b,当下一个字符不是1或0,或者已经读入b.size()个位时停止